home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / font / GlyphLayout.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  4.9 KB  |  213 lines

  1. package sun.font;
  2.  
  3. import java.awt.Font;
  4. import java.awt.font.FontRenderContext;
  5. import java.awt.geom.Point2D;
  6. import java.util.ArrayList;
  7.  
  8. public final class GlyphLayout {
  9.    private GVData _gvdata = new GVData();
  10.    private static GlyphLayout cache;
  11.    private LayoutEngineFactory _lef;
  12.    private TextRecord _textRecord = new TextRecord();
  13.    private ScriptRun _scriptRuns = new ScriptRun();
  14.    private FontRunIterator _fontRuns = new FontRunIterator();
  15.    private int _ercount;
  16.    private ArrayList _erecords = new ArrayList(10);
  17.    private Point2D.Float _pt = new Point2D.Float();
  18.    private FontStrikeDesc _sd = new FontStrikeDesc();
  19.    private float[] _mat = new float[4];
  20.    private int _typo_flags;
  21.    private int _offset;
  22.  
  23.    public static GlyphLayout get(LayoutEngineFactory var0) {
  24.       if (var0 == null) {
  25.          var0 = SunLayoutEngine.instance();
  26.       }
  27.  
  28.       GlyphLayout var1 = null;
  29.       synchronized(GlyphLayout.class) {
  30.          if (cache != null) {
  31.             var1 = cache;
  32.             cache = null;
  33.          }
  34.       }
  35.  
  36.       if (var1 == null) {
  37.          var1 = new GlyphLayout();
  38.       }
  39.  
  40.       var1._lef = var0;
  41.       return var1;
  42.    }
  43.  
  44.    public static void done(GlyphLayout var0) {
  45.       var0._lef = null;
  46.       cache = var0;
  47.    }
  48.  
  49.    public StandardGlyphVector layout(Font var1, FontRenderContext var2, char[] var3, int var4, int var5, int var6, StandardGlyphVector var7) {
  50.       if (var3 != null && var4 >= 0 && var5 >= 0 && var5 <= var3.length - var4) {
  51.          this.init(var5);
  52.          if (var1.hasLayoutAttributes()) {
  53.             AttributeValues var8 = ((AttributeMap)var1.getAttributes()).getValues();
  54.             if (var8.getKerning() != 0) {
  55.                this._typo_flags |= 1;
  56.             }
  57.  
  58.             if (var8.getLigatures() != 0) {
  59.                this._typo_flags |= 2;
  60.             }
  61.          }
  62.  
  63.          this._offset = var4;
  64.          SDCache var21 = sun.font.GlyphLayout.SDCache.get(var1, var2);
  65.          this._mat[0] = (float)var21.gtx.getScaleX();
  66.          this._mat[1] = (float)var21.gtx.getShearY();
  67.          this._mat[2] = (float)var21.gtx.getShearX();
  68.          this._mat[3] = (float)var21.gtx.getScaleY();
  69.          this._pt.setLocation(var21.delta);
  70.          int var9 = var4 + var5;
  71.          int var10 = 0;
  72.          int var11 = var3.length;
  73.          if (var6 != 0) {
  74.             if ((var6 & 1) != 0) {
  75.                this._typo_flags |= Integer.MIN_VALUE;
  76.             }
  77.  
  78.             if ((var6 & 2) != 0) {
  79.                var10 = var4;
  80.             }
  81.  
  82.             if ((var6 & 4) != 0) {
  83.                var11 = var9;
  84.             }
  85.          }
  86.  
  87.          byte var12 = -1;
  88.          Font2D var13 = FontManager.getFont2D(var1);
  89.          this._textRecord.init(var3, var4, var9, var10, var11);
  90.          int var14 = var4;
  91.          if (var13 instanceof CompositeFont) {
  92.             this._scriptRuns.init(var3, var4, var5);
  93.             this._fontRuns.init((CompositeFont)var13, var3, var4, var9);
  94.  
  95.             while(this._scriptRuns.next()) {
  96.                int var15 = this._scriptRuns.getScriptLimit();
  97.  
  98.                int var19;
  99.                for(int var16 = this._scriptRuns.getScriptCode(); this._fontRuns.next(var16, var15); var14 = var19) {
  100.                   PhysicalFont var17 = this._fontRuns.getFont();
  101.                   if (var17 instanceof NativeFont) {
  102.                      var17 = ((NativeFont)var17).getDelegateFont();
  103.                   }
  104.  
  105.                   int var18 = this._fontRuns.getGlyphMask();
  106.                   var19 = this._fontRuns.getPos();
  107.                   this.nextEngineRecord(var14, var19, var16, var12, var17, var18);
  108.                }
  109.             }
  110.          } else {
  111.             this._scriptRuns.init(var3, var4, var5);
  112.  
  113.             while(this._scriptRuns.next()) {
  114.                int var22 = this._scriptRuns.getScriptLimit();
  115.                int var24 = this._scriptRuns.getScriptCode();
  116.                this.nextEngineRecord(var14, var22, var24, var12, var13, 0);
  117.                var14 = var22;
  118.             }
  119.          }
  120.  
  121.          int var23 = 0;
  122.          int var25 = this._ercount;
  123.          byte var26 = 1;
  124.          if (this._typo_flags < 0) {
  125.             var23 = var25 - 1;
  126.             var25 = -1;
  127.             var26 = -1;
  128.          }
  129.  
  130.          for(this._sd = var21.sd; var23 != var25; var23 += var26) {
  131.             EngineRecord var27 = (EngineRecord)this._erecords.get(var23);
  132.  
  133.             while(true) {
  134.                try {
  135.                   var27.layout();
  136.                } catch (IndexOutOfBoundsException var20) {
  137.                   this._gvdata.grow();
  138.                   continue;
  139.                }
  140.             }
  141.          }
  142.  
  143.          StandardGlyphVector var28 = this._gvdata.createGlyphVector(var1, var2, var7);
  144.          return var28;
  145.       } else {
  146.          throw new IllegalArgumentException();
  147.       }
  148.    }
  149.  
  150.    private GlyphLayout() {
  151.    }
  152.  
  153.    private void init(int var1) {
  154.       this._typo_flags = 0;
  155.       this._ercount = 0;
  156.       this._gvdata.init(var1);
  157.    }
  158.  
  159.    private void nextEngineRecord(int var1, int var2, int var3, int var4, Font2D var5, int var6) {
  160.       Object var7 = null;
  161.       EngineRecord var8;
  162.       if (this._ercount == this._erecords.size()) {
  163.          var8 = new EngineRecord(this);
  164.          this._erecords.add(var8);
  165.       } else {
  166.          var8 = (EngineRecord)this._erecords.get(this._ercount);
  167.       }
  168.  
  169.       var8.init(var1, var2, var5, var3, var4, var6);
  170.       ++this._ercount;
  171.    }
  172.  
  173.    // $FF: synthetic method
  174.    static TextRecord access$000(GlyphLayout var0) {
  175.       return var0._textRecord;
  176.    }
  177.  
  178.    // $FF: synthetic method
  179.    static LayoutEngineFactory access$100(GlyphLayout var0) {
  180.       return var0._lef;
  181.    }
  182.  
  183.    // $FF: synthetic method
  184.    static FontStrikeDesc access$200(GlyphLayout var0) {
  185.       return var0._sd;
  186.    }
  187.  
  188.    // $FF: synthetic method
  189.    static float[] access$300(GlyphLayout var0) {
  190.       return var0._mat;
  191.    }
  192.  
  193.    // $FF: synthetic method
  194.    static int access$400(GlyphLayout var0) {
  195.       return var0._offset;
  196.    }
  197.  
  198.    // $FF: synthetic method
  199.    static int access$500(GlyphLayout var0) {
  200.       return var0._typo_flags;
  201.    }
  202.  
  203.    // $FF: synthetic method
  204.    static Point2D.Float access$600(GlyphLayout var0) {
  205.       return var0._pt;
  206.    }
  207.  
  208.    // $FF: synthetic method
  209.    static GVData access$700(GlyphLayout var0) {
  210.       return var0._gvdata;
  211.    }
  212. }
  213.